home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / EAGLE.H < prev    next >
Text File  |  1993-08-09  |  4KB  |  120 lines

  1. #ifndef    _EAGLE_H
  2. #define _EAGLE_H
  3.  
  4. /* Hardware-dependent routines for the EAGLE card for the PC
  5.  * This card contains a Zilog 8530 only - no modem!
  6.  */
  7. #define EGMAX    1            /* One card max */
  8. #define AX_MTU    512
  9. #define INTMASK 0x21        /* Intel 8259 interrupt controller mask */
  10.  
  11. struct EGTAB {
  12.     INTERRUPT (*oldvec) __ARGS((void));    /* Original interrupt vector contents */
  13.     int16 addr;        /* Base I/O address */
  14.     unsigned vec;        /* Vector */
  15.     long ints;        /* Interrupt count */
  16. };
  17. extern struct EGTAB Eagle[];
  18.  
  19. /* Register offset info, specific to the EAGLE
  20.  * E.g., to read the data port on channel A, use
  21.  *    inportb(egchan[dev].base + CHANA + DATA)
  22.  */
  23. #define CHANB        0        /* Base of channel B regs */
  24. #define CHANA        2        /* Base of channel A regs */
  25.  
  26. /* 8530 ports on each channel */
  27. #define CTL            0
  28. #define DATA        1
  29. #define DMACTRL     4        /* Base of channel + 4 */
  30.  
  31. /* EAGLE DMA/INTERRUPT CONTROL REGISTER */
  32. #define DMAPORT     0        /* 0 = Data Port */
  33. #define INTPORT     1        /* 1 = Interrupt Port */
  34. #define DMACHANA    0        /* 0 = DMA on CHANNEL A */
  35. #define DMACHANB    2        /* 1 = DMA on Channel B */
  36. #define DMADISABLE    0        /* 0 = DMA disabled */
  37. #define DMAENABLE    4        /* 1 = DMA enabled */
  38. #define INTDISABLE    0        /* 0 = Interrupts disabled */
  39. #define INTENABLE    8        /* 1 = Interrupts enabled */
  40. #define INTACKTOG    10        /* 1 = INT ACK TOGGLE */
  41.  
  42.  
  43. struct egchan {
  44.     long rxints;            /* Receiver interrupts */
  45.     long txints;            /* Transmitter interrupts */
  46.     long exints;            /* External/status interrupts */
  47.     long spints;            /* Special receiver interrupts */
  48.  
  49.     int enqueued;            /* Packets actually forwarded */
  50.     int rxframes;            /* Number of Frames Actally Received */
  51.     int toobig;                /* Giant receiver packets */
  52.     int crcerr;                /* CRC Errors */
  53.     int aborts;                /* Receiver aborts */
  54.     int rovers;                /* Receiver Overruns */
  55.  
  56.     char status;            /* Copy of R0 at last external interrupt */
  57.     struct mbuf *rcvbuf;    /* Buffer for current rx packet */
  58.     int16 bufsiz;            /* Size of rcvbuf */
  59.     char *rcp;                /* Pointer into rcvbuf */
  60.  
  61.     struct mbuf *sndq;        /* Packets awaiting transmission */
  62.     int16 sndcnt;            /* Number of packets on sndq */
  63.     struct mbuf *sndbuf;    /* Current buffer being transmitted */
  64.     char tstate;            /* Tranmsitter state */
  65. #define IDLE    0            /* Transmitter off, no data pending */
  66. #define ACTIVE    1            /* Transmitter on, sending data */
  67. #define UNDERRUN 2            /* Transmitter on, flushing CRC */
  68. #define FLAGOUT 3            /* CRC sent - attempt to start next frame */
  69. #define DEFER 4             /* Receive Active - DEFER Transmit */
  70.     char rstate;            /* Set when !DCD goes to 0 (TRUE) */
  71. /* Normal state is ACTIVE if Receive enabled */
  72. #define RXERROR 2            /* Error -- Aborting current Frame */
  73. #define RXABORT 3            /* ABORT sequence detected */
  74. #define TOOBIG 4            /* too large a frame to store */
  75.     int dev;                /* Device number */
  76.     int16 base;                /* Base of I/O registers */
  77.     int16 stata;            /* address of Channel A status regs */
  78.     int16 statb;            /* address of Channel B status regs */
  79.     int16 dmactrl;            /* address of DMA/INTERRUPT reg on card */
  80.     int16 speed;            /* Line speed, bps */
  81.     int txdelay;             /* Transmit Delay 10 ms/cnt */
  82.     int persist;             /* Persistence (0-255) as a % */
  83.     int slotime;             /* Delay to wait on persistence hit */
  84.     int squeldelay;         /* Delay after XMTR OFF for seuelch tail */
  85.     struct iface *iface;    /* Associated interface */
  86. };
  87. extern struct egchan Egchan[];
  88.  
  89.  
  90. #define OFF        0
  91. #define ON        1
  92. #define INIT    2
  93.  
  94. /* 8530 clock speed */
  95.  
  96. #define XTAL    ((long) 3686400L/2)     /* 32X clock constant */
  97.  
  98. /*************************************************************/
  99. /* TEMP FOR DEBUG ONLY - eliminates Divide by zero interrupt */
  100. /*               - preset for 1200 BAUD !!!!!!!!!!!!!! */
  101. /*************************************************************/
  102. #define TXCONST 1534             /* (XTAL/1200L)-2 */
  103. #define RXCONST 46             /* ((XTAL/32)/1200L)-2 */
  104.  
  105. /* Baud rate generator definitions */
  106. struct baudrate {
  107.     int16 speed;
  108.     char val;
  109. };
  110.  
  111. /* In eagle.c: */
  112. void egint __ARGS((int dev));
  113.  
  114. /* In eaglevec.asm: */
  115. INTERRUPT eg0vec __ARGS((void));
  116.  
  117. #endif    /* EGMAX */
  118.  
  119.  
  120.